package utils
{
	import flash.filesystem.File;
	import flash.net.FileFilter;

	/**
	 *File类型实例相关的静态处理类 [仅限AIR]
	 * @author Roland
	 * 
	 */
	public class FileProxy
	{
		public function FileProxy()
		{
		}

		/**
		 * 获取文件夹下所有子文件[包括子目录] 
		 * @param dir 代表改文件夹的File文件
		 * @param ignoreHidden 是否忽略隐藏文件/文件夹
		 * @return fileArray
		 * 
		 */
		public static function getAllFileList(dir:File,ignoreHidden:Boolean = true):Array{
			var _allFileList:Array=[];//选定文件夹下所有的文件列表[包括子目录文件] 
			return findFile(dir);
			///迭代查找所有文件
			function findFile(dir:File):Array{
				for each(var file:File in dir.getDirectoryListing()){
					if(ignoreHidden && file.isHidden)continue;
					if(file.isDirectory){//如果是文件夹
						findFile(file);
					}else{
						_allFileList.push(file);
					}
				}
				return _allFileList;
			}
		}
		/**
		 *根据fileFilter过滤文件夹，返回只包含fileFilter中定义的类型的File数组
		 * @param dir 要过滤的文件夹
		 * @param fileFilter 文件滤镜
		 * @param ignoreHidden 是否忽略隐藏文件/文件夹
		 * @return 只包含fileFilter中定义的类型的File数组 
		 * 
		 */
		public static function getTypicalFileList(dir:File,fileFilter:FileFilter,ignoreHidden:Boolean = true):Array{
			var typicalList:Array=[];//选定文件夹下所有的文件列表[包括子目录文件] 
			var typeStr:String=fileFilter.extension.slice(1);
			var typeArr:Array=[];
			typeArr=typeStr.split(";*");
			return findFile(dir);
			///迭代查找所有文件
			function findFile(dir:File):Array{
				for each(var file:File in dir.getDirectoryListing()){
					if(ignoreHidden && file.isHidden)continue;
					if(file.isDirectory){//如果是文件夹
						findFile(file);
					}else{
						for(var i:int=0;i<typeArr.length;i++){
							if(file.type==typeArr[i]){
								typicalList.push(file);
							}
						}
					}
				}
				return typicalList;
			}
		}
		
		/**
		 *根据fileFilter过滤一个File类型数组，返回只包含fileFilter中定义的类型的File数组
		 * @param fileArr 要过滤的数组,形式为[file1:File,file2:File,....]
		 * @param fileFilter　文件滤镜
		 * @return 只包含fileFilter中定义的类型的File数组 
		 * 
		 */
		public static function getTypicalFilesByArray(fileArr:Array,fileFilter:FileFilter):Array{
			var typeStr:String=fileFilter.extension.slice(1);
			var typeArr:Array=[];
			var returnArr:Array=[];
			
			typeArr=typeStr.split(";*");
			for(var i:int=0;i<typeArr.length;i++){
				for(var j:int=0;j<fileArr.length;j++){
					if((fileArr[j] as File).type==typeArr[i])returnArr.push(fileArr[j]);
				}
			}
			returnArr.sortOn("nativePath");//按文件路径排序
			return returnArr;
		}

	}
}